package com.shw.system.sms.utils;

import com.shw.system.sms.aliyun.AliyunSendSms;
import com.shw.system.sms.aliyun.AliyunSmsTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * <阿里云短信发送工具类>
 *
 * @author wangxu
 * @version 1.0
 * @date 2020/04/17 22:05
 */
@Component
public class AliyunSMSUtils implements InitializingBean {

    /** AliyunSendSms静态属性，方便给静态方法使用 */
    private static AliyunSendSms aliyun_send_sms;

    @Autowired
    private AliyunSendSms aliyunSendSms;

    /**
     * 发送身份验证验证码
     *
     * @param phone   手机号
     * @param verCode 验证码
     */
    public static void sendAuthVerCode(String phone, String verCode) {
        Map<String,String> params = new HashMap(2);
        params.put("code",verCode);
        aliyun_send_sms.sendMsg(AliyunSmsTemplate.AUTHENTICATION.getCode(), phone, params);
    }

    /**
     * 发送登录确认验证码
     *
     * @param phone   手机号
     * @param verCode 验证码
     */
    public static void sendLoginVerifyVerCode(String phone, String verCode) {
        Map<String,String> params = new HashMap(2);
        params.put("code",verCode);
        aliyun_send_sms.sendMsg(AliyunSmsTemplate.LOGIN_VERIFY.getCode(), phone, params);
    }

    /**
     * 发送登录异常验证码
     *
     * @param phone   手机号
     * @param verCode 验证码
     */
    public static void sendLoginExceptionVerCode(String phone, String verCode) {
        Map<String,String> params = new HashMap(2);
        params.put("code",verCode);
        aliyun_send_sms.sendMsg(AliyunSmsTemplate.LOGIN_EXCEPTION.getCode(), phone, params);
    }


    /**
     * 发送注册验证码
     *
     * @param phone   手机号
     * @param verCode 验证码
     */
    public static void sendRegisterVerCode(String phone, String verCode) {
        Map<String,String> params = new HashMap(2);
        params.put("code",verCode);
        aliyun_send_sms.sendMsg(AliyunSmsTemplate.REGISTER.getCode(), phone, params);
    }


    /**
     * 发送修改密码验证码
     *
     * @param phone   手机号
     * @param verCode 验证码
     */
    public static void sendUpdatePwdVerCode(String phone, String verCode) {
        Map<String,String> params = new HashMap(2);
        params.put("code",verCode);
        aliyun_send_sms.sendMsg(AliyunSmsTemplate.UPDATE_PWD.getCode(), phone, params);
    }


    /**
     * 发送修改信息验证码
     *
     * @param phone   手机号
     * @param verCode 验证码
     */
    public static void sendUpdateInfoVerCode(String phone, String verCode) {
        Map<String,String> params = new HashMap(2);
        params.put("code",verCode);
        aliyun_send_sms.sendMsg(AliyunSmsTemplate.UPDATE_INFO.getCode(), phone, params);
    }

    /**
     * 自定义模板发送验证码,模板变量默认为${code}
     *
     * @param templateCode 模板代码
     * @param phone        手机号
     * @param verCode      验证码
     */
    public static void sendVerCode(String templateCode, String phone, String verCode) {
        Map<String,String> params = new HashMap(2);
        params.put("code",verCode);
        aliyun_send_sms.sendMsg(templateCode, phone, params);
    }

    /**
     * 自定义模板发送验证码
     *
     * @param templateCode 模板代码
     * @param phone        手机号
     * @param tmpVarName   模板变量名
     * @param verCode      验证码
     */
    public static void sendVerCode(String templateCode, String phone, String tmpVarName, String verCode) {
        Map<String,String> params = new HashMap(2);
        params.put(tmpVarName,verCode);
        aliyun_send_sms.sendMsg(templateCode, phone, params);
    }

    /**
     * 通用发送短信（验证码/通知）  注意签名与模板是否匹配：  签名-(验证码、通用[含验证码，短信通知]) 模板-(验证码、短信通知)
     *
     * @param templateCode 模板代码
     * @param phone        手机号
     * @param templateParams  短信模板参数  key:模板参数名 value：模板参数值
     */
    public static void sendSms(String templateCode, String phone, Map<String,String> templateParams) {
        aliyun_send_sms.sendMsg(templateCode, phone, templateParams);
    }

    /**
     * 初始化静态变量
     *
     * @author Administrator
     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
     * @since 2020-04-20 17:19
     */
    @Override
    public void afterPropertiesSet() {
        aliyun_send_sms = aliyunSendSms;
    }


}
